package kr.pe.johnkim.sendme.activity;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

import kr.pe.johnkim.sendme.provider.SendMeLog;
import kr.pe.johnkim.sendme.provider.SendMeVoice;
import kr.pe.johnkim.sendme.rest.SendMeAudioMessageRest;
import kr.pe.johnkim.sendme.rest.SendMeLogRest;
import kr.pe.johnkim.sendme.util.SendMeActivityManager;
import kr.pe.johnkim.sendme.util.SendMeCommon;
import kr.pe.johnkim.sendme.util.SendMeConstant;
import kr.pe.johnkim.sendme.util.SendMeCustomTimePickerDialog;
import kr.pe.johnkim.sendme.util.SendMeDBManagerAudioRecord;

import org.json.JSONArray;
import org.json.JSONObject;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;

/**
 *  보관 메시지를 재생할때 사용되는 액티비티 클래스이다.
 *  녹음 화면에서 녹음 이후 재생할때 처럼 기본적인 재생 기능이 있고
 *  하단 버튼들은 녹음화면에서의 기능과 다르므로 새롭게 구현되어 있다.
 *  
 *  하단 버튼 목록
 *   재생 : 음성 메시지 재생			: 파일 절대 경로 필요 filePath
 *   전송 : 음성 메시지 전송  (성공시 이후 삭제 처리)		: sender, receiver, fileName,  
 *   예약 : 음성 메시지 예약 전송  (성공시 이후 삭제 처리)  : sender, receiver, fileName, 
 *   삭제 : 음성 메시지 삭제 (sqlite 에서도 삭제하고, 로컬 파일도 함께 삭제). 삭제 후 화면을 닫고  보관함으로 이동..	: id, filePath, 
 * @author blue
 *
 */
public class SendMeAudioPlayForDownloadMessageActivity extends Activity implements OnClickListener, OnCompletionListener{

	public static String TAG = SendMeAudioPlayForDownloadMessageActivity.class.getSimpleName();

	// 액티비티 매니저를 가져 온다.
	private SendMeActivityManager sendMeActivityManager = SendMeActivityManager.getInstance();

	String applicationAudioDownloadDirectory = SendMeConstant.APPLICATION_AUDIO_DOWNLOAD_DIRECTORY; 		//"/Android/data/kr.pe.jonhkim.sendme.activity/.AudioRecord/temp";			// 녹음 중인 임시파일 저장될 경로 지정, 탐색기,미디어 스캐너에 나타나지 않게 비공개 처리 

	// 녹음 음성 재생기
	private MediaPlayer mPlayer = null;

	// 파일명
	String fileName;

	// 파일명 포함하는 파일 경로
	String filePath;

	// 보내는 사람 전번
	String sender;	
	String senderName;	

	// 받는 사람 전번. 서버 전송용
	String[] receiverList ;
	String[] receiverNameList ;

	String sqliteKey;
	String receiver;
	//	String receiverName;

	// 보낸 사람 표시 뷰
	TextView senderNameTxt;	

	// 녹음 가능 시간
	TextView recordedTimeTxt;										// 녹음 된 시간 표시 뷰
	private int mProgressCheckStepMs = SendMeConstant.mProgressCheckStepMs;		// 녹음 및 재생에서 진행바의 갱신 간격(ms 단위) : 0.5초마다 체크

	// 재생 중 표시
	SeekBar playSeekbar;		// 재생 진행 상태 바
	TextView mTvPlayMaxPoint;	// 전체 재생 시간

	// 하단 녹음 이후 메뉴 버튼들
	ImageButton menuPlayBtn;
	ImageButton menuReplyBtn;
	ImageButton menuDeleteBtn;

	// 상단 재생 관련 스크린 레이아웃
	View audioPlayScreenLayout;


	//	// 녹음 화면 모드 / 예약 전송 화면 모드
	//	View record_screen_layout;
	//	View audio_record_reservation_screen_layout;

	ImageButton imageButtonTopBack;
	ImageButton imageButtonTopMainMenu;
	
	// 프로그래스바(로딩 표시)
	private ProgressDialog dialog;


	// 로그를 남긴다
	private static final int THREAD_REGISTER_LOG = 100;

	// 메시지 재생 준비
	private static final int THREAD_INIT_PLAYING = 104;

	// 음성을 재생한다
	private static final int THREAD_PLAYING_RECORD = 105;


	//	// 음성 메시지 전송전 확인 창을 띄운다				
	//	private static final int THREAD_CONFIRM_SEND_AUDIO = 106;		

	// 프로그레스 바를 출력 한다.
	private static final int THREAD_PROGRESS_BAR_VISIBLE = 108;

	// 프로그레스 바를 감춘다.
	private static final int THREAD_PROGRESS_BAR_INVISIBLE = 109;

	//	// 등록 성공 토스트를 띄운다
	//	private static final int THREAD_TOAST_SEND_SUCCESS = 110;
	//
	//	// 등록 실패 토스트를 띄운다
	//	private static final int THREAD_TOAST_SEND_FAIL = 112;		


	// 음성 메시지를 삭제할지 확인받는다
	private static final int CONFIRM_DELETE_DOWNLOAD_AUDIO_FILE = 119;		

	//	// 음성 메시지를 삭제 한다
	//	private static final int THREAD_DELETE_DOWNLOAD_AUDIO_FILE = 114;		

	// 삭제 성공 토스트를 띄운다
	private static final int THREAD_TOAST_DOWNLOAD_DELETE_SUCCESS = 116;	

	// 삭제 실패 토스트를 띄운다
	private static final int THREAD_TOAST_DOWNLOAD_DELETE_FAIL = 118;		

	// 녹음 화면 호출
	private static final int RECORDING_SCREEN_CALL = 135;
	
	// 예약 화면에서 메뉴를 콜함. 이 액티비티도 종료해야함
	private static final int RESULT_MAIN_MENU_CALLED = 600;		
	
	
	//	// 예약 전송 화면으로 전환한다
	//	private static final int THREAD_CHANGE_TO_RESERVATION_SCREEN = 113;		



	// 재생시 SeekBar 처리
	Handler mProgressHandler2 = new Handler()
	{
		public void handleMessage(Message msg)
		{
			if (mPlayer == null) return;
			try
			{
				if (mPlayer.isPlaying())
				{
					//					Log.d(TAG,"mPlayer.getCurrentPosition():"+mPlayer.getCurrentPosition());
					if(mPlayer.getCurrentPosition()>0){		// 재생 끝나고나서도 동작되어 0이 표시되는 경우가 있기 때문에 0은 표시해주지 않도록 처리
						playSeekbar.setProgress(mPlayer.getCurrentPosition());
					}
					mProgressHandler2.sendEmptyMessageDelayed(0, mProgressCheckStepMs);
				}
			}
			catch (IllegalStateException e)
			{}
			catch (Exception e)
			{}
		}
	};

	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////	

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		// 커스텀 타이블 바를 설정 한다.
		Window window = getWindow();
		window.requestFeature(Window.FEATURE_CUSTOM_TITLE);

		setContentView(R.layout.activity_send_me_play_for_download_message);

		window.setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_bar_03);

		// 액티비티 매니저에 담는다.
		sendMeActivityManager.addActivity(this);

		// 내 전화번호 (보낸 사람 전화번호) 획득
		confirmNotification();

		
		// 뒤로 가기 화살표 버튼을 설정 한다.
				imageButtonTopBack = (ImageButton)findViewById(R.id.imageButtonTopBack);
				imageButtonTopBack.setOnClickListener(new View.OnClickListener() {

					@Override
					public void onClick(View v) {
						// TODO Auto-generated method stub

						// 리스트 호출
						Intent intent = new Intent(returnThis(), SendMeDownloadMessageListActivity.class);
						startActivity(intent);
						
						// 화면을 닫는다.
						mediaPlayerReleaseAndFinishThisActivity();
					}
				});

				// 타이틀바의 메인 메뉴 버튼을 설정 한다.
				imageButtonTopMainMenu = (ImageButton)findViewById(R.id.imageButtonTopMainMenu);
				imageButtonTopMainMenu.setOnClickListener(new OnClickListener() {

					@Override
					public void onClick(View v) {
						// TODO Auto-generated method stub
						Log.i(TAG, "pressed top main menu.");

						// 메인 메뉴 화면을 출력 한다.
						Intent i = new Intent(SendMeAudioPlayForDownloadMessageActivity.this, SendMeMainMenuActivity.class);
						startActivity(i);
						
						// 화면을 닫는다.
						mediaPlayerReleaseAndFinishThisActivity();
					}
				});
		
		
		
		
		
		// 전달받은 받는 사람(리스트) 를 획득
		Intent getIntent = getIntent();

		receiver = getIntent.getStringExtra("receiver");
		sqliteKey = getIntent.getStringExtra("sqliteKey");

		sender = getIntent.getStringExtra("sender");
		senderName = getIntent.getStringExtra("senderName");

		fileName = getIntent.getStringExtra("fileName");
		filePath = getIntent.getStringExtra("filePath");

		// 답장용 (보낸 사람이 받는 사람이 됨)
		SendMeCommon sendMeCommon = new SendMeCommon();
		receiverList = sendMeCommon.convertStringToArray(sender);			
		receiverNameList = sendMeCommon.convertStringToArray(senderName);

		
		
		
		// 녹음 된 시간
		recordedTimeTxt = (TextView) findViewById(R.id.audio_record_recorded_second_txt);

		// 상단 재생 관련 스크린 레이아웃
		audioPlayScreenLayout = (View) findViewById(R.id.audio_play_screen_layout);					// 녹음 후

		/*
		 * 재생 진행바
		 */
		mTvPlayMaxPoint = (TextView) findViewById(R.id.tvPlayMaxPoint);		// 시간 표시
		playSeekbar = (SeekBar) findViewById(R.id.play_seekbar);
		playSeekbar.setOnTouchListener(new OnTouchListener() {public boolean onTouch(View v, MotionEvent event) {
			playSeekbarChange(v);
			return false; }
		});

		// 메뉴 버튼들

		menuPlayBtn = (ImageButton) findViewById(R.id.menu_play_btn);
		menuPlayBtn.setOnClickListener(this);
		menuReplyBtn = (ImageButton) findViewById(R.id.menu_reply_btn);
		menuReplyBtn.setOnClickListener(this);
		menuDeleteBtn = (ImageButton) findViewById(R.id.menu_delete_btn);	// 로컬 삭제 + sqlite 에서도 삭제하도록 한다
		menuDeleteBtn.setOnClickListener(this);

		// 받는 사람 이름 표시 뷰(재생용)
		senderNameTxt = (TextView) findViewById(R.id.sender_name_txt);

		if(receiverNameList.length==1){
			senderNameTxt.setText(receiverNameList[0]);	// receiverList --> receiverNameList
		}else{
			senderNameTxt.setText("그룹 전송");
		}

		// 로깅.
		mHandler.sendMessage(mHandler.obtainMessage(THREAD_REGISTER_LOG));

		// 재생 준비
		mHandler.sendMessage(mHandler.obtainMessage(THREAD_INIT_PLAYING));

	}

	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

	/*
	 * 하단 녹음/메뉴 버튼 클릭 리스너
	 */
	@Override
	public void onClick(View v) {
		switch (v.getId()) {

		// 재생
		case R.id.menu_play_btn:
			mHandler.sendMessage(mHandler.obtainMessage(THREAD_PLAYING_RECORD));
			break;

			// 답장
		case R.id.menu_reply_btn:
			recordForReply();
			break;

			//삭제 확인, 삭제 후 닫기
		case R.id.menu_delete_btn:
			mHandler.sendMessage(mHandler.obtainMessage(CONFIRM_DELETE_DOWNLOAD_AUDIO_FILE));
			break;

		}
	}


	// 답장
	public void recordForReply(){
		Intent intent = new Intent(SendMeAudioPlayForDownloadMessageActivity.this, SendMeAudioRecordActivity.class);
		intent.putExtra("receiverList", receiverList);
		intent.putExtra("receiverNameList", receiverNameList);
//		startActivity(intent);
		startActivityForResult(intent, RECORDING_SCREEN_CALL);
	}	

	//////////////////////////////////////////////////////////////////////////////////////////////

	// 확인창.
	/**
	 * 음성 메시지 삭제 전 확인 창을 띄운다
	 * 
	 */
	private Runnable confirmDeleteAudioToDownload = new Runnable() {
		@Override
		public void run() {

			new AlertDialog.Builder(SendMeAudioPlayForDownloadMessageActivity.this)
			.setTitle("삭제 확인")
			.setMessage("음성 메시지를 삭제하시겠습니까?")
			.setNegativeButton("취소", new DialogInterface.OnClickListener() {

				@Override
				public void onClick(DialogInterface dialog, int which) {

				}
			})
			.setPositiveButton("확인", new DialogInterface.OnClickListener() {

				@Override
				public void onClick(DialogInterface dialog, int which) {
					deleteDownloadFileAndFinishActivityWithToast();				
				}
			}).show();

		}
	};

	// 토스트
	/**
	 *  음성 메시지 삭제에 성공했다는 toast 를 띄운다.
	 */
	public void showToastAudioDeleteToDownloadSuccess() {
		CharSequence text = " 보관함에서 삭제되었습니다.";
		Toast toast = Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT);
		toast.setGravity(Gravity.CENTER_VERTICAL|Gravity.CENTER_HORIZONTAL, 0, 0);
		toast.show();

		// 화면을 닫는다.
//		sendMeActivityManager.removeActivity(SendMeAudioPlayForDownloadMessageActivity.this);
//		finish();
		mediaPlayerReleaseAndFinishThisActivity();
	}
	/**
	 * 음성 메시지 삭제에 실패했다는 toast 를 띄운다.
	 */
	public void showToastAudioDeleteToDownloadFail() {
		CharSequence text = "삭제에 실패하였습니다.";
		Toast toast = Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT);
		toast.setGravity(Gravity.CENTER_VERTICAL|Gravity.CENTER_HORIZONTAL, 0, 0);
		toast.show();
	}

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//  

	/**
	 * 필요한 핸들러를 등록해서 사용한다.
	 */
	private Handler mHandler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			switch(msg.what) {

			// 로그를 남긴다
			case THREAD_REGISTER_LOG : 
				threadRegisterLog();
				break;
				// 음성 재생 준비한다
			case THREAD_INIT_PLAYING : 
				runOnUiThread(initToplay);
				break;

				// 녹음한 음성을 재생한다
			case THREAD_PLAYING_RECORD : 
				runOnUiThread(playRecording);
				break;

				// (서버 통신) 프로그레스 바를 출력 한다.
			case THREAD_PROGRESS_BAR_VISIBLE : 
					dialog.show();
				break;
				// (서버 통신) 프로그레스 바를 감춘다.
			case THREAD_PROGRESS_BAR_INVISIBLE : 
				dialog.hide();
				break;

				// 음성 메시지 삭제 확인받는다  -> 확인 누르면 삭제 후 종료
			case CONFIRM_DELETE_DOWNLOAD_AUDIO_FILE :
				runOnUiThread(confirmDeleteAudioToDownload);		
				break;		

				// 음성 메시지 삭제 성공 토스트를 띄운다
			case THREAD_TOAST_DOWNLOAD_DELETE_SUCCESS :
				showToastAudioDeleteToDownloadSuccess();
				break;	
				// 음성 메시지 삭제 실패 토스트를 띄운다
			case THREAD_TOAST_DOWNLOAD_DELETE_FAIL :
				showToastAudioDeleteToDownloadFail();
				break;	

			}
		}
	};
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// 재생 관련 기능들

	/**
	 * 음성 재생을 준비한다
	 */
	private Runnable initToplay = new Runnable() {
		@Override
		public void run() {
			initMediaPlayer();
		}
	};
	/**
	 * 녹음한 음성을 재생한다
	 */
	private Runnable playRecording = new Runnable() {
		@Override
		public void run() {
			// 음성을 재생한다
			//			initMediaPlayer();
			startPlay();
		}
	};

	/*
	 * 진행바를 터치하여 미디어 플레이어를 컨트롤할수 있도록한다
	 */
	private void playSeekbarChange(View v){
		if(mPlayer.isPlaying()){
			SeekBar sb = (SeekBar)v;
			mPlayer.seekTo(sb.getProgress());
		}
	}

	/*
	 * 미디어 플레이어 초기화
	 */
	private void initMediaPlayer()
	{
		// 미디어 플레이어 생성
		if (mPlayer == null)
			mPlayer = new MediaPlayer();
		else{
			mPlayer.reset();
		}
		mPlayer.setOnCompletionListener(this);
		String fullFilePath = filePath;
		try
		{
			mPlayer.setDataSource(fullFilePath);
			mPlayer.prepare();   
			int point = mPlayer.getDuration();
			playSeekbar.setMax(point);

			int maxMinPoint = point / 1000 / 60;
			int maxSecPoint = (point / 1000) % 60;
			String maxMinPointStr = "";
			String maxSecPointStr = "";

			if (maxMinPoint < 10)
				maxMinPointStr = "0" + maxMinPoint + ":";
			else
				maxMinPointStr = maxMinPoint + ":";

			if (maxSecPoint < 10)
				maxSecPointStr = "0" + maxSecPoint;
			else
				maxSecPointStr = String.valueOf(maxSecPoint);

			mTvPlayMaxPoint.setText(maxMinPointStr + maxSecPointStr);		// 시간 값?

			playSeekbar.setProgress(0);	// init
		}
		catch(Exception e)
		{
			Log.d("ProgressRecorder", "media player Prepare Error : " + e);
		}
	}

	// 재생 시작
	private void startPlay()
	{
		Log.d("ProgressRecorder", "startPlay().....");
		try
		{
			mPlayer.start();

			// SeekBar의 상태를 mProgressCheckStepMs 마다 체크      
			mProgressHandler2.sendEmptyMessageDelayed(0, mProgressCheckStepMs);
		}
		catch (Exception e)
		{
			e.printStackTrace();
			Toast.makeText(this, "error : " + e.getMessage(), 0).show();
		}
	}

	@Override
	public void onCompletion(MediaPlayer mp)
	{
		// 재생이 끝났으므로 진행바를 가장 끝으로 위치시킨다
		playSeekbar.setProgress(mPlayer.getDuration());
		// 재생이 종료되면 즉시 SeekBar 메세지 핸들러를 호출한다. 
		mProgressHandler2.sendEmptyMessageDelayed(0, 0);
	}

	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////	
	// 서버 통신

	//	/**
	//	 * 음성 메시지를 등록한다
	//	 *  일반 리스트를 서버로 전송할때는 서버에서 RequestBody 로 받아서 json을 자동으로 object 변환시켜주므로
	//	 *    jsonArray 에 jsonObject 를 담을때 toString() 처리하여 담아서 보내야 하지만 
	//	 *  multipart로 파일을 전송하는 경우에는 서버에서 RequestParam 으로 받는데 이때에는 json을 자동으로 object 변환하지 않기 때문에
	//	 *   jsonArray 에 jsonObject 를 담을때 jsonObject 그대로 넣어야 서버에서 받을때 넣은 json 형태 그대로 꺼내어진다. 
	//	 */
	//	public void threadRegisterVoice() {
	//
	//		// 프로그레스 바를 출력 한다.
	//		mHandler.sendMessage(mHandler.obtainMessage(THREAD_PROGRESS_BAR_VISIBLE));
	//
	//		Thread thread = new Thread(new Runnable() {
	//
	//			public void run() {
	//				// TODO Auto-generated method stub
	//				
	//				// 받는 사람 리스트를 string 데이터로 변환
	//				JSONObject jsonObject = null;
	//				JSONArray jsonArray = new JSONArray();
	//				String receiverListStr = "";
	//				try{
	//					for(int i=0; i<receiverList.length; i++){
	//						// 방법 1
	//						jsonObject = new JSONObject();
	//						jsonObject.put("phoneNumber", receiverList[i]);
	////						jsonArray.put(jsonObject.toString());			// 서버로 전송 실패하게 됨
	//						jsonArray.put(jsonObject);						
	//					}
	//					receiverListStr = jsonArray.toString();
	//					Log.d(TAG,"receiverListStr:"+receiverListStr);		
	//				}catch(Exception e){
	//					e.printStackTrace();
	//				}
	//				
	//				SendMeCommon sendMeCommon = new SendMeCommon();
	//
	//				SendMeVoice sendMeVoice = new SendMeVoice();
	//				sendMeVoice.setIdSendMeVoice("");			// 테이블 아이디.(PK)	
	//
	//				sendMeVoice.setSender(sender);		//	생성자. 보내는 멤버 휴대 전화 번호.	
	//				sendMeVoice.setReceiver(receiverListStr);		// 받는 멤버 휴대 전화 번호.		 
	//
	//				sendMeVoice.setActivateYn("Y");				// 활성화 여부.	
	//				sendMeVoice.setModifyDate(sendMeCommon.getCurrentDate());				// 수정 일자.	
	//				sendMeVoice.setRegisterDate(sendMeCommon.getCurrentDate());				// 등록 일자.	
	//
	//				sendMeVoice.setAvailableDay(SendMeConstant.AVAILABLE_DAY);			// 사용 가능 기간 일수. 기본값은 7	
	//				sendMeVoice.setReadYn("N");					// 읽음 여부. 기본값은 N			
	//
	//					// 일반 전송
	//					sendMeVoice.setDeliveryYn("Y");				// 예약 발송일 경우  N				
	//					sendMeVoice.setReservationDate("");			// 예약 발송일 경우 날짜				
	//					sendMeVoice.setReservationTime("");			// 예약 발송일 경우 시각
	//
	//				sendMeVoice.setFileName(fileName);				// 파일 명.	
	//
	//				// 음성 파일.
	//				String fileChk = filePath;		// 경로 포함 파일 명
	//
	//				File file = new File(fileChk);
	//				if(file.exists()){
	//					try {
	//						sendMeVoice.setFile(file);
	//					} catch (Exception e) {
	//						e.printStackTrace();
	//					}
	//				}
	//				//				sendMeVoice.setFileContentType("audio/mpeg");			// FileContentType for mp3
	//
	//				SendMeAudioMessageRest sendMeAudioMessageRest = new SendMeAudioMessageRest();
	//				SendMeVoice result = new SendMeVoice();
	//				result = sendMeAudioMessageRest.registerVoice(sendMeVoice);		// 원본 (정상 동작)
	////				result = sendMeAudioMessageRest.registerVoice2(sendMeVoice);	// 테스트용
	//
	//				// 프로그레스 바를 감춘다.
	//				mHandler.sendMessage(mHandler.obtainMessage(THREAD_PROGRESS_BAR_INVISIBLE));
	//
	//				//  성공하면 toast 를 띄워서 알려준다. 
	//				if(("SUCCESS").equals(result.getResult())) {
	//
	//					// 성공 알림 토스트
	//					mHandler.sendMessage(mHandler.obtainMessage(THREAD_TOAST_SEND_SUCCESS));
	//					
	//					// 종료 프로세스
	//					deleteDownloadFileAndFinishActivity();
	//				}else{
	//					// 실패 알림 토스트
	//					mHandler.sendMessage(mHandler.obtainMessage(THREAD_TOAST_SEND_FAIL));
	//				}
	//			}
	//		});
	//		thread.start();
	//	}

	/**
	 * 로그를 남긴다	 
	 */
	public void threadRegisterLog() {
		Thread thread = new Thread(new Runnable() {
			public void run() {

				SendMeCommon sendMeCommon = new SendMeCommon();
				String nowTime = sendMeCommon.getCurrentDate();

				SendMeLog sendMeLog = new SendMeLog();
				sendMeLog.setPhoneNumber(sender);
				sendMeLog.setViewName(TAG);
				sendMeLog.setRegisterDate(nowTime);

				SendMeLogRest sendMeLogRest = new SendMeLogRest();

				sendMeLogRest.registerLog(sendMeLog);
			}
		});
		thread.start();
	}
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	
	@Override
	public void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		Bundle extraBundle;
		if( requestCode == RECORDING_SCREEN_CALL ) {
			
			if(resultCode == Activity.RESULT_OK){		// 정상 반환시.
				Log.d(TAG,"RESULT_OK");
				extraBundle = data.getExtras();		// 번들을 반환했으니까 번들을 불러오면 세팅된 값을 가지고 있음.

//				String key1 = extraBundle.getString("key1");	
//				Log.d(TAG,"key1:"+key1);
				
				// 리스트 호출
				Intent intent = new Intent(returnThis(), SendMeDownloadMessageListActivity.class);
				startActivity(intent);
				
				// 화면을 닫는다.
				mediaPlayerReleaseAndFinishThisActivity();
				
			}else if(resultCode == Activity.RESULT_CANCELED){
				Log.d(TAG,"RESULT_CANCELED");
			}else if(resultCode == RESULT_MAIN_MENU_CALLED){
				Log.d(TAG,"RESULT_MAIN_MENU_CALLED");
				
				// 화면을 닫는다.
				mediaPlayerReleaseAndFinishThisActivity();
				
			}
		}
	}
	
	
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

	/**
	 * SharedPreference 정보를 확인 한다.
	 */
	public void confirmNotification() {
		SharedPreferences mSharedPreference = getSharedPreferences(SendMeConstant.SENDME_PREFERENCE, Activity.MODE_PRIVATE);

		sender = mSharedPreference.getString("phone_number", "");
		Log.i(TAG, "sender : " + sender);
	}

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////	
	// 액티비티 종료 관련 기능들

	// 컨텍스트 반환
	public Context returnThis() {
		return this;
	}
	
	/**
	 * 메시지 메시지 삭제
	 *   메시지를 sqlite 와 로컬에서 삭제하고 종료한다
	 *  
	 */
	public void deleteDownloadFileAndFinishActivity(){
		// sqlite 에서 삭제
		SendMeDBManagerAudioRecord sendMeDBManagerAudioRecord = new SendMeDBManagerAudioRecord(this);
		if(sendMeDBManagerAudioRecord.deleteDownloadAudioData(sqliteKey)) {

			//  파일이 있다면 지운다.
			checkAndDeleteDownloadFile();
		} else {
			// 실패 알림 토스트
			mHandler.sendMessage(mHandler.obtainMessage(THREAD_TOAST_DOWNLOAD_DELETE_FAIL));
		}
		// 화면을 닫는다.
//		sendMeActivityManager.removeActivity(SendMeAudioPlayForDownloadMessageActivity.this);
//		finish();
		mediaPlayerReleaseAndFinishThisActivity();
	}
	/**
	 * 메시지 삭제
	 *   메시지를 sqlite 와 로컬에서 삭제하고 종료한다 
	 *    토스트 알림 있음
	 *  
	 */
	public void deleteDownloadFileAndFinishActivityWithToast(){
		// sqlite 에서 삭제
		SendMeDBManagerAudioRecord sendMeDBManagerAudioRecord = new SendMeDBManagerAudioRecord(this);
		if(sendMeDBManagerAudioRecord.deleteDownloadAudioData(sqliteKey)) {

			//   파일이 있다면 지운다.
			checkAndDeleteDownloadFile();

			mHandler.sendMessage(mHandler.obtainMessage(THREAD_TOAST_DOWNLOAD_DELETE_SUCCESS));
		} else {
			// 실패 알림 토스트
			mHandler.sendMessage(mHandler.obtainMessage(THREAD_TOAST_DOWNLOAD_DELETE_FAIL));
		}
		// 화면을 닫는다.
//		sendMeActivityManager.removeActivity(SendMeAudioPlayForDownloadMessageActivity.this);
//		finish();
		
		// 리스트 호출
		Intent intent = new Intent(returnThis(), SendMeDownloadMessageListActivity.class);
		startActivity(intent);
		
		mediaPlayerReleaseAndFinishThisActivity();
	}

	/**
	 *  파일이 있는지 체크하고 있다면 지운다. ?
	 */
	public void checkAndDeleteDownloadFile(){
		
		if(mPlayer!=null){
			mPlayer.reset();
			//			mPlayer.release();	
			mPlayer = null;
		}
		
		String fileChk = filePath;
		File file = new File(fileChk);
		if(file.exists()){
			file.delete();
		}
	}

	
	@Override
	public void onBackPressed(){
		super.onBackPressed();
		
		// 리스트 호출
		Intent intent = new Intent(returnThis(), SendMeDownloadMessageListActivity.class);
		startActivity(intent);
		
		mediaPlayerReleaseAndFinishThisActivity();
	}
	
	/**
	 * 종료. 미디어 플레이어 릴리즈
	 */
	public void mediaPlayerReleaseAndFinishThisActivity(){
		// 초기화
		if(mPlayer!=null){
			mPlayer.reset();
			//			mPlayer.release();
		}
		// 화면을 닫는다.
		sendMeActivityManager.removeActivity(SendMeAudioPlayForDownloadMessageActivity.this);
		finish();
	}
	
	@Override
	public void onResume(){
		super.onResume();
		dialog = ProgressDialog.show(SendMeAudioPlayForDownloadMessageActivity.this, "", "Wait..", true);	// 제목, 내용
		dialog.hide();
	}
	@Override
	public void onStop(){
		super.onStop();
		dialog.dismiss();
	}
	
	

}
